package com.example.cryptodemo.aes;

import org.apache.commons.codec.binary.Base64;

/**
 * 开发者信息
 * <p>
 * 不能公开，只能开发者使用
 *
 * @author Yunkai Luo
 * @since 17:01 2021/11/2
 **/
public class DeveloperInformation {
    private byte[] aesKey;
    /**
     * 设置的token，用来校验信息
     */
    private String token;
    /**
     * 解密key，用来加密和解密{@link com.example.cryptodemo.aes.Message}的信息
     * <p>
     * 注意一定要有43位
     */
    private String encodingAesKey;
    /**
     * 对应开发者的多个应用
     * <p>
     * 开发者可能有多个应用
     */
    // private String appId;

    private DeveloperInformation() {
    }

    /**
     * 需要三个信息
     *
     * @param token          第三方平台申请时填写的接收消息的校验token
     * @param encodingAesKey 第三方平台申请时填写的接收消息的加密symmetric_key
     * @param appId          第三方平台的appid
     * @throws AesException 加密异常
     */
    public DeveloperInformation(String token, String encodingAesKey) throws AesException {
        setToken(token);
        setEncodingAesKey(encodingAesKey);
    }

    public String getToken() {
        return token;
    }

    private void setToken(String token) {
        this.token = token;
    }

    public String getEncodingAesKey() {
        return encodingAesKey;
    }

    public void setEncodingAesKey(String encodingAesKey) throws AesException {
        if (encodingAesKey.length() != 43) {
            throw new AesException(AesException.IllegalAesKey);
        }
        this.encodingAesKey = encodingAesKey;
        aesKey = Base64.decodeBase64(encodingAesKey + "=");
    }

    public byte[] getAesKey() {
        return aesKey;
    }
}
